Groundwater Module

History

current version 1.1 - 12th February 2023

version date comment
1.0 14/Sep/2011 Original code
1.0 22/Feb/2023 Code rewritten

License

license: GNU GPL http://www.gnu.org/licenses/

Module Description

Simulate quasi 3D groundwater flux and river-groundwater interaction

References

Ravazzani, G., Rametta, D., & Mancini, M.. (2011). Macroscopic cellular automata for groundwater modelling: a first approach. Environmental modelling & software, 26(5), 634–643.

Ravazzani, G., Curti, D., Gattinoni, P., Della Valentina, S., Fiorucci, A., & Rosso, R.. (2016). Assessing groundwater contribution to streamflow of a large alpine river with heat tracer methods and hydrological modelling. River research and applications, 32(5), 871-884.

Ravazzani, G., Barbero, S., Salandin, A., Senatore, A., & Mancini, M.. (2015). An integrated hydrological model for assessing climate change impacts on water resources of the upper po river basin. Water resources management, 29 (4), 1193-1215.

Description: Write results on output file



Variables

Type Visibility Attributes Name Initial
type(GroundwaterBasin), public :: basin
integer(kind=short), public :: dtGroundwater
type(grid_real), public :: groundwaterToRiver

discharge from groundwater to river (m3/s)

logical, public :: riverGroundwaterInteract
type(grid_real), public :: riverToGroundwater

discharge from river to groundwater (m3/s)

type(grid_real), public :: vadoseDepth
integer(kind=short), private, parameter :: ACTIVE_CELL = 1
integer(kind=short), private, parameter :: BC_DIRICHLET = 2
integer(kind=short), private, parameter :: BC_NEUMANN = 3
integer(kind=short), private :: fileUnitOutGW
integer(kind=short), private, ALLOCATABLE :: fileUnitPointGW(:)
type(grid_real), private :: fluxDownward

flux from upper aquitard (m/s)

type(grid_real), private :: fluxUpward

flux from lower aquitard (m/s)

type(grid_real), private :: riverDem

reference digital elevation model to compute river water surface elevation (m asl)

type(grid_integer), private :: riverGroundwaterID

id of river reaches that interact with groundwater

type(Table), private :: riverGroundwaterParameters
type(ObservationalNetwork), private :: sites
type(grid_real), private :: streambedConductivity

streambed conductivity (m/s)

type(grid_real), private :: streambedThickness

streambed thickness (m)

type(DateTime), private :: timePointExport
type(grid_real), private :: transmissivity

local transmissivity (m2/s)

real(kind=float), private :: volumeChange

change of stored water volume in groundwater (m3)

real(kind=float), private :: volumeDirichlet

volume from Dirichlet boundary condition (m3)

real(kind=float), private :: volumeGroundwaterToRiver

volume from groundwater to river (m3)

real(kind=float), private :: volumeNeumann

volume from Neumann boundary condition (m3)

real(kind=float), private :: volumeRecharge

recharge volume (m3)

real(kind=float), private :: volumeResidual

balance error (m3)

real(kind=float), private :: volumeRiverToGroundwater

volume from river to groundwater (m3)


Derived Types

type, public ::  Aquifer

Components

Type Visibility Attributes Name Initial
type(grid_real), public :: Ks
type(grid_real), public :: KsAquitard
type(grid_real), public :: bottom
type(grid_integer), public :: domainBC
type(grid_real), public :: head0
type(grid_real), public :: head1
type(grid_real), public :: sy
type(grid_real), public :: top
type(grid_real), public :: valueBC

type, public ::  GroundwaterBasin

Components

Type Visibility Attributes Name Initial
type(Aquifer), public, POINTER :: aquifer(:)
integer(kind=short), public :: nAquifers

number of aquifers in the basin


Subroutines

public subroutine GroundwaterInit(inifile)

Initialize groundwater

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: inifile

stores configuration information

public subroutine GroundwaterOutput(time)

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time

current time

public subroutine GroundwaterOutputInit(path_out)

Initialize files for exporting output results

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: path_out

path of output folder

public subroutine GroundwaterPointInit(pointfile, path_out, time)

Initialize export of point site data

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: pointfile

file containing coordinate of points

character(len=*), intent(in) :: path_out

path of output folder

type(DateTime), intent(in) :: time

start time

public subroutine GroundwaterRiverUpdate(waterDepth, topWidth)

Update river-groundwater exchange fluxes

Arguments

Type IntentOptional Attributes Name
type(grid_real), intent(in) :: waterDepth

river water depth (m)

type(grid_real), intent(in) :: topWidth

river top width (m)

public subroutine GroundwaterUpdate(time, hillslopeFlux, percolation, capflux)

update groundwater head with Darcy law and mass conservation in two dimensions, with a macrocopic cellular automata approach

Read more…

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time
type(grid_real), intent(in) :: hillslopeFlux

flux from hillslope (m3/s)

type(grid_real), intent(in) :: percolation

depp infiltration from soil balance (m/s)

type(grid_real), intent(in) :: capflux

capillary flux from soil balance (m/s)

private subroutine GroundwaterParameterUpdate(time)

update boundary condition map that change in time

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time

private subroutine GroundwaterPointExport(time)

Export of point site data

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time

private subroutine GroundwaterRiverInit(inifile)

Configure river-groundwater interaction

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: inifile

configuration file